package com.reactor.flux;

import java.util.ArrayList;
import java.util.Random;

import reactor.core.publisher.Flux;

public class FluxDemo3 {

	//第一个序列的生成逻辑中通过 next()方法产生一个简单的值，然后通过 complete()方法来结束该序列。如果不调用 complete()方法，所产生的是一个无限序列。
	//第二个序列的生成逻辑中的状态对象是一个 ArrayList 对象。实际产生的值是一个随机数。产生的随机数被添加到 ArrayList 中。当产生了 10 个数时，通过 complete()方法来结束序列。
	public static void main(String[] args) {
		Flux.generate(sink -> {
		    sink.next("Hello");
		    sink.complete();
		}).subscribe(System.out::println);


		final Random random = new Random();
		Flux.generate(ArrayList::new, (list, sink) -> {
		    int value = random.nextInt(100);
		    list.add(value);
		    sink.next(value);
		    if (list.size() == 10) {
		        sink.complete();
		    }
		    return list;
		}).subscribe(System.out::println);
	}

}
